package handler.client;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import handler.dataPackage.DriverDeviceMessage;
import handler.dataPackage.PlatResponse;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder;

import java.util.List;

/**
 * @author dfj@99chuxing.com
 * @date 2018/4/4 0004 10:44
 * 乘客端解码器，解码入站数据(字节流) 解码器是负责将入站数据从一种格式转换到另一种格式的，
 *
 * 什么时候会用到解码器  需要为ChannelPipeline(处理器链容器)中的下一个handler转换入站数据时
 */
public class ClientDecoder extends ByteToMessageDecoder{


    /**
     * decode()方法被调用时将会传入一个包含了传入数据的 ByteBuf，以及一个用来添加解码消息的 List,这个方法的调用将会重复进行，
     * 直到确定没有新的元素被添加到该 List，或者该 ByteBuf 中没有更多可读取的字节时为止。然后，如果该 List 不为空，那么它的内容将会被传递给ChannelPipeline 中的下一个 ChannelInboundHandler
     * @param channelHandlerContext
     * @param byteBuf
     * @param list
     * @throws Exception
     */
    @Override
    protected void decode(ChannelHandlerContext channelHandlerContext, ByteBuf byteBuf, List<Object> list) throws Exception {
        System.out.println("客户端解码器对入站数据进行解码------");
        int i = byteBuf.readableBytes();
        if (i<=0){
            return;
        }
        byte[] bytes =new byte[i];
        byteBuf.readBytes(bytes);
        PlatResponse PlatResponse = JSON.parseObject(new String(bytes),PlatResponse.class);
        list.add(PlatResponse);

    }

}
